//
// Created by PC on 2024/7/11.
/*
 * 全排列
 * OJ: https://www.luogu.com.cn/problem/P1706 PASS
 * 题目描述

按照字典序输出自然数 1 到 n 所有不重复的排列，即 n 的全排列，要求所产生的任一数字序列中不允许出现重复的数字。
输入格式

一个整数 n。
输出格式

由 1∼n 组成的所有不重复的数字序列，每行一个序列。

每个数字保留 5 个场宽。
输入输出样例
输入 #1
3
输出 #1
    1    2    3
    1    3    2
    2    1    3
    2    3    1
    3    1    2
    3    2    1
说明/提示

1≤n≤9
 * */
//


#include <iostream>
#include <vector>
using namespace std;

void permute(vector<int> v, int n=0)
{
     if (n==v.size()-1)
     {
         for (int i = 0; i < v.size(); ++i)
         {
             cout<<"    "<<v[i];
         }
         cout<<endl;
     }
    for (int i = n; i < v.size(); ++i)
    {
        swap(v[n],v[i]);
        permute(v,n+1);
//        swap(v[n],v[i]); //加上这句顺序就错了
    }
}

int main()
{
    int n = 4;
//    cin>>n;
    vector<int> arr;
    for (int i = 0; i < n; ++i)
        arr.push_back(i+1);
    permute(arr);
    return 0;
}